package com.eastfair.imaster.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.eastfair.boot.request.PageParams;
import com.eastfair.boot.service.SuperCacheService;
import com.eastfair.core.base.R;
import com.eastfair.imaster.dto.ConferenceTopicDTO;
import com.eastfair.imaster.dto.ConferenceTopicPageQuery;
import com.eastfair.imaster.entity.ConferenceTopic;
import com.eastfair.imaster.vo.ConferenceTopicVO;

import java.util.List;

/**
 * <p>
 * 业务接口
 * 论坛主题
 * </p>
 *
 * @author zjn
 * @date 2021-08-31
 */
public interface ConferenceTopicService extends SuperCacheService<ConferenceTopic> {

    /**
     * 新增论坛主题
     *
     * @param conferenceTopicDTO 论坛论坛主题
     * @return 是否操作成功
     */
    R<Boolean> saveConferenceTopic(ConferenceTopicDTO conferenceTopicDTO);

    /**
     * 根据id删除论坛主题
     *
     * @param id 主键id
     * @return 是否成功
     */
    R<Boolean> deleteById(Long id);

    /**
     * 通过id修改论坛主题
     *
     * @param conferenceTopicDTO
     * @return
     */
    R<Boolean> updateById(ConferenceTopicDTO conferenceTopicDTO);

    /**
     * 通过id查询论坛
     *
     * @param id 通过id查询论坛
     * @return 论坛实体
     */
    R<ConferenceTopicVO> queryById(Long id);

    /**
     * 获取分页论坛主题列表
     *
     * @param params 分页条件
     * @return 分页论坛主题列表
     */
    Page<ConferenceTopicVO> queryPageList(PageParams<ConferenceTopicPageQuery> params);

    /**
     * 删除论坛与论坛主题的关系
     *
     * @param conferenceId 论坛id
     * @return 是否删除成功
     */
    R<Boolean> deleteTopicRelation(Long conferenceId);

    /**
     * 论坛主题列表
     *
     * @param conferenceTopicDTO 筛选条件
     * @return 论坛主题列表
     */
    R<List<ConferenceTopicVO>> queryList(ConferenceTopicDTO conferenceTopicDTO);

    /**
     * 通过论坛id修改论坛主题的启用/禁用状态
     *
     * @param conferenceId 论坛id
     * @param isEnabled    启用状态
     * @return 是否成功
     */
    R<Boolean> updateEnabledByConferenceId(Long conferenceId, Integer isEnabled);

    /**
     * 通过id修改启用禁用状态
     * @param conferenceTopicDTO
     * @return
     */
    R<Boolean> updateEnabledById(ConferenceTopicDTO conferenceTopicDTO);
}
